我們習慣把數據或者對像作為參數傳遞給方法,比如: int i = int.Parse("99");
int i = int.Parse("99");
如果我們把方法作為參數傳遞給方法,這就需要用到委託了
namespace delegate_test_01
{
class Program
{
//我們習慣把數據或者對像作為參數傳遞給方法,
//比如: int i = int.Parse("99");
//如果我們把方法作為參數傳遞給方法,這就需要用到委託了
public delegate void toSometing(int number);
//C#中委託的參數和返回類型,都要和你要具體委託的方法要一致
public static void PrintNum(int number) //預計要被傳遞的方法
{
Console.WriteLine($"PrintNumber:{number}");
}
public static void SquareFunction(int number) // print數字的平方
{
Console.WriteLine($"SquareFunction:{Math.Pow(number, 2)}");
}
public static void RadicalFunction(int number)// print數字開根號
{
Console.WriteLine($"RadicalFunction:{Math.Sqrt(number)}");
}
static void Main(string[] args)
{
//字面上理解委託,就像是A委託B去辦一件事情一樣
// WriteSometing 請 PrintNumber 處理事情
toSometing delegateTestA = new toSometing(PrintNum);//傳統寫法
delegateTestA += RadicalFunction;
delegateTestA += PrintNum;
delegateTestA += SquareFunction;
delegateTestA(25);
Console.WriteLine("====以下另一個委任====");
toSometing b = PrintNum; //語法糖
b(88);
Console.WriteLine("按任意鍵結束....");
Console.ReadKey(); //可按任意鍵結束畫面
}
}
}
結果
PrintNumber:25
RadicalFunction:5
PrintNumber:25
SquareFunction:625
====以下另一個委任====
PrintNumber:88
按任意鍵結束....
實際應用的情境 教學 引用高手文章
https://eric0806.blogspot.com/2015/01/dotnet-delegate-usage.html
delegate 多播委託
委託的多播(Multicasting of a Delegate)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//delegate int NumberChanger(int n);
namespace multicasting1
{
//delegate int NumberChanger(int n);
class Program
{
delegate int NumberChanger(int n);
static int num = 10;
public static int AddNum(int p)
{
num += p;
return num;
}
public static int MultNum(int q)
{
num *= q;
return num;
}
public static int getNum()
{
return num;
}
static void Main(string[] args)
{
NumberChanger nc; //nc=5
NumberChanger nc1 = new NumberChanger(AddNum);
//宣告的委派 有一個int參數5 這參數會送進 AddNum 方法當參數使用 num = num+5; 10+5
NumberChanger nc2 = new NumberChanger(MultNum);
//宣告的委派 有一個int參數5 這參數會送進 MultNum 方法當參數使用15*5
nc = nc1;
nc += nc2;
nc(5);
//使用同一個參數5 委派串了兩個方法 兩個方法參數都是5
//num的值隨著方法 一直被更改值 一開始是num=10
//進了第一個方法 num=15 進了第二個方法 num=75
Console.WriteLine("Value of Num: {0}", getNum());
Console.ReadKey();
}
}
}